#!/bin/bash

# 函数：清理微服务备份文件
# 参数1: 要清理的微服务根目录路径
# 参数2: 要保留的最新文件数量（可选，默认为3）
clean_backup_files() {
    local target_dir="$1"
    local reserve=${2:-3}  # 默认保留3个文件

    if [[ ! -d "$target_dir" ]]; then
        echo "错误：目录 $target_dir 不存在"
        return 1
    fi

    # 切换到目标目录
    cd "$target_dir" || return 1

    echo "开始清理 $(pwd) 下的微服务（hsrcm）备份文件"
    echo "每个微服务 backup 下最多保留 $reserve 个文件"

    local cleancount=0

    # 遍历目标目录下的所有文件夹
    for path in $(ls); do
        # 判断文件夹是否以 hsrcm 开头
        if [[ "$path" == hsrcm-* ]]; then
            # 进入到子目录遍历
            cd "$path" || continue
            echo "准备清理的微服务路径：$(pwd)"

            for cl in $(ls); do
                if [[ "$cl" == backup ]]; then
                    # 进入到包含backup的那一层
                    cd "$cl" || continue

                    local count=0
                    for xx in $(ls); do
                        ((count++))
                    done

                    count=$((count - reserve))

                    if [ $count -gt 0 ]; then
                        local docount=0
                        for file in $(ls); do
                            ((docount++))
                            if [ $docount -le $count ]; then
                                rm -rf "$file"
                                echo "清理的文件($docount/$count)：$file"
                                ((cleancount++))
                            fi
                        done
                    fi

                    cd .. || return 1
                fi
            done

            echo "------------$(pwd)清理完成----------------"
            cd .. || return 1
        fi
    done

    echo "清理完成，总共清理文件 $cleancount 个"
    return 0
}

# 主程序
main() {
    # 定义要清理的目录数组
    local target_dirs=("/opt/software" "/home/software" "/data/software" "/disk01/software" "/u01/software")

    # 记录开始时间
    local start_time=$(date +"%Y-%m-%d %H:%M:%S")
    echo "开始时间: $start_time"

    # 遍历所有目标目录
    for dir in "${target_dirs[@]}"; do
        echo "======================================================================"
        echo "正在处理目录: $dir"
        echo "----------------------------------------------------------------------"

        # 检查目录是否存在
        if [[ ! -d "$dir" ]]; then
            echo "警告：目录 $dir 不存在，跳过"
            continue
        fi

        # 显示清理前磁盘使用情况
        echo "清理前磁盘使用情况 ($dir):"
        df -h "$dir"

        # 调用清理函数
        # 第一个参数是要清理的目录路径，第二个参数是要保留的文件数量（可选）
        clean_backup_files "$dir" 1

        # 显示清理后磁盘使用情况
        echo "清理后磁盘使用情况 ($dir):"
        df -h "$dir"

        echo "----------------------------------------------------------------------"
        echo "目录 $dir 处理完成"
        echo "======================================================================"
    done

    # 记录结束时间
    local end_time=$(date +"%Y-%m-%d %H:%M:%S")
    echo "结束时间: $end_time"
}

# 执行主程序
main "$@"